package com.kolaxy.social.govern.report.service;

import com.kolaxy.social.govern.report.dao.ReportTaskDao;
import com.kolaxy.social.govern.report.dao.ReportTaskVoteDao;
import com.kolaxy.social.govern.report.domain.ReportTask;
import com.kolaxy.social.govern.report.domain.ReportTaskVote;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Description TODO
 * @Author zrj
 * @Date 2020/9/5 11:48
 * @Version 1.0
 */
@Service
public class ReportTaskVoteServiceImpl implements ReportTaskVoteService {

    @Autowired
    ReportTaskVoteDao reportTaskVoteDao;

    @Autowired
    ReportTaskDao reportTaskDao;

    public void add(ReportTaskVote reportTaskVote) {
        reportTaskVoteDao.add(reportTaskVote);
    }

    public void initVotes(List<Long> reviewsId, Long reportTaskId) {
        for (Long reviewerId : reviewsId) {
            ReportTaskVote reportTaskVote = new ReportTaskVote();
            reportTaskVote.setReportTaskId(reportTaskId);
            reportTaskVote.setReviewerId(reviewerId);
            reportTaskVote.setVoteResult(ReportTaskVote.UNKNOWN);
            add(reportTaskVote);
        }
    }

    public void vote(Long reviewerId, Long reportTaskId, Integer voteResult) {
        ReportTaskVote reportTaskVote = new ReportTaskVote();
        reportTaskVote.setReportTaskId(reportTaskId);
        reportTaskVote.setReviewerId(reviewerId);
        reportTaskVote.setVoteResult(ReportTaskVote.UNKNOWN);
        reportTaskVoteDao.update(reportTaskVote);
    }

    public void calculateVotes(Long reportTaskId) {
        List<ReportTaskVote> reportTaskVotes = reportTaskVoteDao.queryByReportTaskId(reportTaskId);

        int quorum = reportTaskVotes.size() / 2 + 1;

        Integer approvedVotes = 0 ;
        Integer unapprovedVotes = 0;

        for (ReportTaskVote reportTaskVote : reportTaskVotes) {
            if (reportTaskVote.getVoteResult().equals(ReportTaskVote.APPROVED)) {
                approvedVotes ++;
            }else if (reportTaskVote.getVoteResult().equals(ReportTaskVote.UNAPPROVED)) {
                unapprovedVotes ++;
            }
        }
        ReportTask reportTask = new ReportTask();
        if (approvedVotes >= quorum) {

            //设置状态
        }else if (unapprovedVotes >= quorum) {
            //设置状态
        }
        reportTask.setId(reportTaskId);
        reportTaskDao.update(reportTask);

    }
}
